package com.naiterui.ehp.bs.doctor.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.naiterui.ehp.bp.domain.DrPatientGroupDetail;

public interface IDrPatientGroupDetailDao {

    /**
     * 根据分组ID查询分组下患者列表
     * DrPatientGroupDetailDaoImpl.getDetailByGroupId()
     *
     * @param groupId
     * @param doctorId
     *
     * @return
     *
     * @Author guoyongxiang
     * @Date 2017年4月2日
     * @since 2.7.0
     */
    List<Long> getPatientIdsByGroupId(Long groupId, Long doctorId);

    /**
     * 根据分组ID列表查询分组下患者列表
     * DrPatientGroupDetailDaoImpl.getDetailByGroupId()
     *
     * @param groupIds
     * @param doctorId
     *
     * @return
     *
     * @Author guoyongxiang
     * @Date 2017年4月2日
     * @since 2.7.0
     */
    List<DrPatientGroupDetail> getDetailByGroupIds(List<Long> groupIds, Long doctorId);

    /**
     * 根据医生ID所有分组的患者列表
     * DrPatientGroupDetailDaoImpl.getDetailByDoctorId()
     *
     * @param doctorId
     *
     * @return
     *
     * @Author guoyongxiang
     * @Date 2017年4月2日
     * @since 2.7.0
     */
    List<DrPatientGroupDetail> getDetailByDoctorId(Long doctorId);

    /**
     * 根据医生ID和患者ID获取分组信息
     *
     * @param doctorId   医生ID
     * @param patientIds 患者ID集合
     *
     * @return
     */
    List<DrPatientGroupDetail> getDetailByDoctorId(Long doctorId, List<Long> patientIds);
    /**
     * 向指定分组批量保存患者
     * DrPatientGroupDetailDaoImpl.savePatientsByGroupId()
     *
     * @param groupId
     * @param doctorId
     * @param patientIds
     *
     * @Author guoyongxiang
     * @Date 2017年4月2日
     * @since 2.7.0
     */
    void savePatientsByGroupId(Long groupId, Long doctorId, List<Long> patientIds);

    /**
     * 批量移除指定分组的患者
     * DrPatientGroupDetailDaoImpl.removePatientsByGroupId()
     *
     * @param groupId
     * @param patientIds
     *
     * @Author guoyongxiang
     * @Date 2017年4月2日
     * @since 2.7.0
     */
    void removePatientsByGroupId(Long groupId, List<Long> patientIds);

    /**
     * 一个患者添加进多个分组
     *
     * @param doctorId  医生ID
     * @param patientId 患者ID
     * @param groupIds  分组id集合
     *
     * @Description
     * @History 2017年6月12日 by wangchuan
     */
    void savePatientByGroupIds(Long doctorId, Long patientId, Set<Long> groupIds);

    /**
     * 从多个分组中移除患者
     *
     * @param patientId 患者ID
     * @param groupIds  组集合
     *
     * @Description
     * @History 2017年6月12日 by wangchuan
     */
    void removePatientFromGroupIds(Long patientId, Set<Long> groupIds);

    /**
     * 医生下所有分组，患者计数
     *
     * @param doctorId 医生ID
     *
     * @return
     *
     * @Description [key=groupId, value=patientCount]
     * @History 2017年6月12日 by wangchuan
     */
    Map<Long, Long> getPatientCountInGroup(Long doctorId);

    /**
     * 根据组id列表，获取所有的患者id
     *
     * @param groupIds 组id列表
     *
     * @return
     *
     * @Description
     * @History 2017年6月12日 by wangchuan
     */
    List<Long> getPatientIdsByGroupIds(List<Long> groupIds);

    /**
     * 通过医生ID和患者ID删除分组信息
     *
     * @param doctorId  医生id
     * @param patientId 患者id
     */
    void removeDoctorPatien(Long doctorId, Long patientId);

}